package edu.eam.paii.proyecto.entidades;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.*;

@Entity
/**
 * @author Hector Bedoya Ortegon
 * @author Felipe Suarez Bedoya
 * Esta entidad permite manejar toda la informacion de la cuenta.
 */
/**
 * Name quevery 
 */
@NamedQueries(value = { @NamedQuery(name = "Cuenta.listar", query = "select C from Cuenta C"),
		@NamedQuery(name="Cuenta.listarCuentasCliente",
				query="select cuenta from Cuenta " +
				"cuenta where cuenta.clienteCuenta=:"+Cuenta.CLIENTE_DOCUMENTO)

})
public class Cuenta implements Serializable {
	public final static String CLIENTE_DOCUMENTO="Cedula";
	@Id
	private int nro_Cuenta;
	private Date fecha_Creacion;
	@ManyToOne
	@JoinColumn(name = "id_Cliente")
	private Cliente clienteCuenta;
	private double saldo;
	@ManyToOne
	@JoinColumn(name = "id_Entidad")
	private Entidad entidadCuenta;

	@OneToMany(mappedBy = "cuentaRetiro", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Retiro> retiros;

	@OneToMany(mappedBy = "cuentaConsignacion", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Consignacion> consignaciones;

	@ManyToOne
	@JoinColumn(name = "id_Cuenta")
	private Tipo_Cuenta tipoCuenta;
	
	private boolean activo;

	public Cuenta(int nro_Cuenta, Date fecha_Creacion, Cliente clienteCuenta,
			double saldo, Entidad entidadCuenta) {
		super();
		this.nro_Cuenta = nro_Cuenta;
		this.fecha_Creacion = fecha_Creacion;
		this.clienteCuenta = clienteCuenta;
		this.saldo = saldo;
		this.entidadCuenta = entidadCuenta;
		activo=true;
	}
	
	

	public Tipo_Cuenta getTipoCuenta() {
		return tipoCuenta;
	}



	public void setTipoCuenta(Tipo_Cuenta tipoCuenta) {
		this.tipoCuenta = tipoCuenta;
	}



	public int getNro_Cuenta() {
		return nro_Cuenta;
	}

	public void setNro_Cuenta(int nro_Cuenta) {
		this.nro_Cuenta = nro_Cuenta;
	}

	public Date getFecha_Creacion() {
		return fecha_Creacion;
	}

	public void setFecha_Creacion(Date fecha_Creacion) {
		this.fecha_Creacion = fecha_Creacion;
	}

	public Cliente getClienteCuenta() {
		return clienteCuenta;
	}

	public void setClienteCuenta(Cliente clienteCuenta) {
		this.clienteCuenta = clienteCuenta;
	}

	public double getSaldo() {
		return saldo;
	}

	public void setSaldo(double saldo) {
		this.saldo = saldo;
	}

	public Entidad getEntidadCuenta() {
		return entidadCuenta;
	}

	public void setEntidadCuenta(Entidad entidadCuenta) {
		this.entidadCuenta = entidadCuenta;
	}

	public List<Retiro> getRetiros() {
		return retiros;
	}

	public void setRetiros(List<Retiro> retiros) {
		this.retiros = retiros;
	}

	public List<Consignacion> getConsignaciones() {
		return consignaciones;
	}

	public void setConsignaciones(List<Consignacion> consignaciones) {
		this.consignaciones = consignaciones;
	}

	public boolean isActivo() {
		return activo;
	}

	public void setActivo(boolean activo) {
		this.activo = activo;
	}

	

}
